package com.tql.mall.order.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.tql.mall.common.result.R;
import com.tql.mall.model.enums.ProcessStatus;
import com.tql.mall.model.order.OrderInfo;
import com.tql.mall.model.order.ReturnInfo;

import java.util.Map;

/**
 * @Author: tyk
 * @Date: 2023/5/26 17:37
 * @Description:
 */
public interface OrderService extends IService<OrderInfo> {

    /**
     * 订单页面需要数据
     */
    Map<String, Object> trade(String userId);

    /**
     * 提交订单
     */
    Long submitOrder(OrderInfo orderInfo);

    /**
     * 生成流水号
     */
    String getTradeNo(String userId);

    /**
     * 校验流水号
     */
    Boolean checkTradeCode(String userId, String tradeNoCode);

    /**
     * 删除流水号
     */
    void deleteTradeCode(String userId);


    /**
     * 校验订单
     */
    R checkOrder(String userId, String tradeNo, OrderInfo orderInfo);


    /**
     * 根据orderId查询我的订单
     */
    IPage<OrderInfo> getOrderList(String userId, Page<OrderInfo> pageInfo);

    /**
     * 处理超时订单
     */
    void execExpireOrder(Long orderId);

    /**
     * 修改订单状态
     */
    void updateOrderStatus(Long orderId, ProcessStatus status);

    /**
     * 根据订单ID查询订单信息
     */
    OrderInfo getOrderInfo(Long orderId);


    /**
     * 退货
     */
    void returnGood(ReturnInfo returnInfo);

    /**
     * 拆单
     */
    void splitOrder(OrderInfo orderInfo);

    /**
     * 获取商家订单
     */
    IPage<OrderInfo> getOrderListForShop(Long shopId, Page<OrderInfo> pageInfo);
}
